using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using JlPay.Sdk.Core;
using JlPay.Sdk.Services.Openmerch.Change;
using JlPay.Sdk.Models.Openmerch.Change;

namespace JlPay.Sdk.Examples.Openmerch.Change
{
    /// <summary>
    /// 开放商户 - 费率信息变更功能使用示例
    /// </summary>
    public class RateInfoChangeDemo
    {
        /// <summary>
        /// 构建费率信息变更请求
        /// </summary>
        private static RateInfoChangeRequest BuildRateInfoChangeRequest()
        {
            // 构建费率信息列表
            var rateInfo = new List<Dictionary<string, object>>
            {
                new Dictionary<string, object>
                {
                    ["channel_type"] = "01",  // 渠道类型：01-银联
                    ["fee_rate"] = "0.006",   // 费率：0.6%
                    ["min_fee"] = "1",        // 最低手续费：1分
                    ["max_fee"] = "1000"      // 最高手续费：10元
                },
                new Dictionary<string, object>
                {
                    ["channel_type"] = "02",  // 渠道类型：02-微信
                    ["fee_rate"] = "0.006",   // 费率：0.6%
                    ["min_fee"] = "1",        // 最低手续费：1分
                    ["max_fee"] = "1000"      // 最高手续费：10元
                },
                new Dictionary<string, object>
                {
                    ["channel_type"] = "03",  // 渠道类型：03-支付宝
                    ["fee_rate"] = "0.006",   // 费率：0.6%
                    ["min_fee"] = "1",        // 最低手续费：1分
                    ["max_fee"] = "1000"      // 最高手续费：10元
                }
            };

            var request = new RateInfoChangeRequest
            {
                ApplyId = "b8659ea518d14c99b78b5ad000a0731a",
                MerchNo = "849584358140108",
                RateInfo = rateInfo
            };

            return request;
        }

        /// <summary>
        /// 费率信息变更示例
        /// </summary>
        public static async Task RateInfoChangeDemoAsync()
        {
            Console.WriteLine("开始执行费率信息变更示例");

            // 使用DemoConfig创建配置对象
            var config = DemoConfig.CreateConfigWithCrypto();
            Console.WriteLine("配置初始化完成，已启用自动加密和解密功能");

            var changeService = new ChangeService(config);

            // 创建费率信息变更请求
            var request = BuildRateInfoChangeRequest();

            try
            {
                // 发送请求
                var response = await changeService.ChangeRateInfoAsync(request);

                // 使用优化的响应处理
                response.HandleResponse("费率信息变更", config);
            }
            catch (Exception ex)
            {
                // 使用优化的异常处理
                var response = new RateInfoChangeResponse();
                response.HandleResponseWithException("费率信息变更", config, ex);
            }

            Console.WriteLine("费率信息变更示例执行完毕");
        }

        /// <summary>
        /// 主程序入口
        /// </summary>
        public static async Task Main(string[] args)
        {
            Console.WriteLine("=" + new string('=', 50));
            Console.WriteLine("===== 费率信息变更示例 开始 =====");
            Console.WriteLine("=" + new string('=', 50));

            await RateInfoChangeDemoAsync();

            Console.WriteLine("=" + new string('=', 50));
            Console.WriteLine("===== 费率信息变更示例执行完毕 =====");
            Console.WriteLine("=" + new string('=', 50));
        }
    }
} 